<?php

/**
 * Zend Framework
 *
 * LICENSE
 *
 * This source file is subject to the new BSD license that is bundled
 * with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://framework.zend.com/license/new-bsd
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@zend.com so we can send you a copy immediately.
 *
 * @category   Zend
 * @package    Zend_Filter
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 * @version    $Id: Digits.php 23775 2011-03-01 17:25:24Z ralph $
 */

/**
 * @see Zend_Filter_Interface
 */
require_once 'Zend/Filter/Interface.php';

/**
 * @category   Zend
 * @package    Zend_Filter
 * @copyright  Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com)
 * @license    http://framework.zend.com/license/new-bsd     New BSD License
 */
class Zend_Filter_Digits implements Zend_Filter_Interface {
	/**
	 * Is PCRE is compiled with UTF-8 and Unicode support
	 *
	 * @var mixed
	 **/
	protected static $_unicodeEnabled;
	
	/**
	 * Class constructor
	 *
	 * Checks if PCRE is compiled with UTF-8 and Unicode support
	 *
	 * @return void
	 */
	public function __construct() {
		if (null === self::$_unicodeEnabled) {
			self::$_unicodeEnabled = (@preg_match ( '/\pL/u', 'a' )) ? true : false;
		}
	}
	
	/**
	 * Defined by Zend_Filter_Interface
	 *
	 * Returns the string $value, removing all but digit characters
	 *
	 * @param  string $value
	 * @return string
	 */
	public function filter($value) {
		if (! self::$_unicodeEnabled) {
			// POSIX named classes are not supported, use alternative 0-9 match
			$pattern = '/[^0-9]/';
		} else if (extension_loaded ( 'mbstring' )) {
			// Filter for the value with mbstring
			$pattern = '/[^[:digit:]]/';
		} else {
			// Filter for the value without mbstring
			$pattern = '/[\p{^N}]/';
		}
		
		return preg_replace ( $pattern, '', ( string ) $value );
	}
}
